/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bs.global.modelo;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 *
 * @author ctrosch
 */
@Entity
@Table(name = "gr_concepto")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "MODULO", discriminatorType = DiscriminatorType.STRING, length = 2)
@IdClass(ConceptoPK.class)
public abstract class Concepto implements Serializable {
    private static final long serialVersionUID = 1L;
    
    @Id
    @Column(name = "MODULO", nullable = false, length = 2)
    private String modulo;
    @Id
    @Column(name = "TIPCPT", nullable = false, length = 1)
    private String tipo;
    @Id
    @Column(name = "CODIGO", nullable = false, length = 6)
    private String codigo;
    
    @Basic(optional = false)
    @Column(name = "DESCRP", nullable = false, length = 60)
    private String descripcion;
        
    @JoinColumns({
        @JoinColumn(name = "MODULO", referencedColumnName = "MODULO", nullable = false, insertable=false, updatable=false),
        @JoinColumn(name = "TIPCPT", referencedColumnName = "CODIGO", nullable = false, insertable=false, updatable=false)        
    })
    @ManyToOne(fetch = FetchType.LAZY)
    private TipoDeConcepto tipoConcepto;

//    @OneToMany
//    public List<ImpuestoPorConcepto> impuestos;

    public Concepto() {
        
    }
    
    public Concepto(String modcpt, String tipcpt, String codcpt){
        
        this.modulo = modcpt;
        this.tipo = tipcpt;
        this.codigo = codcpt;
        
    }

    public String getModulo() {
        return modulo;
    }

    public void setModulo(String modulo) {
        this.modulo = modulo;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }
    
    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }
//    
//    public List<ImpuestoPorConcepto> getImpuestos() {
//        return impuestos;
//    }
//
//    public void setImpuestos(List<ImpuestoPorConcepto> impuestos) {
//        this.impuestos = impuestos;
//    }

    public TipoDeConcepto getTipoConcepto() {
        return tipoConcepto;
    }

    public void setTipoConcepto(TipoDeConcepto tipoConcepto) {
        this.tipoConcepto = tipoConcepto;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 41 * hash + (this.modulo != null ? this.modulo.hashCode() : 0);
        hash = 41 * hash + (this.tipo != null ? this.tipo.hashCode() : 0);
        hash = 41 * hash + (this.codigo != null ? this.codigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Concepto other = (Concepto) obj;
        if ((this.modulo == null) ? (other.modulo != null) : !this.modulo.equals(other.modulo)) {
            return false;
        }
        if ((this.tipo == null) ? (other.tipo != null) : !this.tipo.equals(other.tipo)) {
            return false;
        }
        if ((this.codigo == null) ? (other.codigo != null) : !this.codigo.equals(other.codigo)) {
            return false;
        }
        return true;
    }


    

    @Override
    public String toString() {
        return "Concepto{" + "modulo=" + modulo + ", tipo=" + tipo + ", codigo=" + codigo + '}';
    }
    

}
